package com.meihuayishu.backend.service;

import com.meihuayishu.backend.dto.UserDTO;
import com.meihuayishu.backend.dto.UserDivinationSettingsDTO;
import com.meihuayishu.backend.dto.UserLoginDTO;
import com.meihuayishu.backend.dto.UserRegistrationDTO;
import com.meihuayishu.backend.entity.User;

import java.util.Optional;

public interface UserService {
    
    /**
     * 用户注册
     * @param registrationDTO 注册信息
     * @return 注册成功的用户DTO
     */
    UserDTO register(UserRegistrationDTO registrationDTO);
    
    /**
     * 用户登录
     * @param loginDTO 登录信息
     * @return 登录成功的用户DTO
     */
    UserDTO login(UserLoginDTO loginDTO);
    
    /**
     * 根据ID获取用户
     * @param id 用户ID
     * @return 用户DTO
     */
    Optional<UserDTO> getUserById(Long id);
    
    /**
     * 根据用户名获取用户
     * @param username 用户名
     * @return 用户DTO
     */
    Optional<UserDTO> getUserByUsername(String username);
    
    /**
     * 更新用户心情状态
     * @param userId 用户ID
     * @param moodStatus 心情状态
     * @return 更新后的用户DTO
     */
    UserDTO updateMoodStatus(Long userId, String moodStatus);
    
    /**
     * 更新用户当前城市
     * @param userId 用户ID
     * @param currentCity 当前城市
     * @return 更新后的用户DTO
     */
    UserDTO updateCurrentCity(Long userId, String currentCity);
    
    /**
     * 将User实体转换为UserDTO
     * @param user 用户实体
     * @return 用户DTO
     */
    UserDTO convertToDTO(User user);
    
    /**
     * 获取用户的占卜设置
     * @param userId 用户ID
     * @return 用户占卜设置DTO
     */
    UserDivinationSettingsDTO getUserDivinationSettings(Long userId);
    
    /**
     * 更新用户的占卜设置
     * @param userId 用户ID
     * @param settings 占卜设置
     * @return 更新后的用户占卜设置DTO
     */
    UserDivinationSettingsDTO updateUserDivinationSettings(Long userId, UserDivinationSettingsDTO settings);
}